﻿using Modelado.Modulos.ClasesModelado;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AccesoDatos.Modulos.ClasesAccesoDatos
{
    public class AD_Puesto_Permiso
    {
        public List<MOD_Puesto_Permiso> SEL_Puesto_Permisos_By_ID(SqlCommand comando, int codPuesto)
        {
            try
            {
                string sp = "SP_SEL_Puesto_Permiso_By_Usuario";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@USU_CODPUESTO", SqlDbType.Int));


                comando.Parameters[0].Value = codPuesto;

                IDbDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                List<MOD_Puesto_Permiso> lista = new List<MOD_Puesto_Permiso>();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    MOD_Puesto_Permiso obj = new MOD_Puesto_Permiso();
                    obj.PUEPER_nombre_permiso = dt.Rows[i]["PERM_NOMBRE"].ToString();
                    obj.PUEPER_nombre_modulo = dt.Rows[i]["PERM_MODULO"].ToString();


                    lista.Add(obj);
                }


                return lista;

            }
            catch (Exception exc)
            {
                throw exc;
            }
        }

        public List<MOD_Puesto_Permiso> SEL_Modulos(SqlCommand comando)
        {
            try
            {
                string sp = "SP_SEL_Modulo";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                IDbDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                List<MOD_Puesto_Permiso> lista = new List<MOD_Puesto_Permiso>();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    MOD_Puesto_Permiso obj = new MOD_Puesto_Permiso();
                    obj.PUEPER_codModulo = Convert.ToInt32(dt.Rows[i]["MODU_CODMODULO"]);
                    obj.PUEPER_nombre_modulo = dt.Rows[i]["MODU_NOMBRE"].ToString();


                    lista.Add(obj);
                }


                return lista;

            }
            catch (Exception exc)
            {
                throw exc;
            }
        }

        public List<MOD_Puesto_Permiso> SEL_Permisos_By_Modulo(SqlCommand comando)
        {
            try
            {
                string sp = "SP_SEL_PERMISOS_BY_MODULO";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();



                IDbDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                List<MOD_Puesto_Permiso> lista = new List<MOD_Puesto_Permiso>();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    MOD_Puesto_Permiso obj = new MOD_Puesto_Permiso();
                    obj.PUEPER_codPermiso = Convert.ToInt32(dt.Rows[i]["PERM_CODPERMISO"]);
                    obj.PUEPER_nombre_permiso = dt.Rows[i]["PERM_NOMBRE"].ToString();


                    lista.Add(obj);
                }


                return lista;

            }
            catch (Exception exc)
            {
                throw exc;
            }
        }

        public List<MOD_Puesto_Permiso> SEL_Permisos_By_IDMOD_IDPUE(SqlCommand comando, int codModulo, int codPuesto)
        {
            try
            {
                string sp = "SP_SEL_PERMISOS_BY_IDMODULO_IDPUESTO";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@MODU_CODMODULO", SqlDbType.Int));
                comando.Parameters.Add(new SqlParameter("@PUE_CODPUESTO", SqlDbType.Int));

                comando.Parameters[0].Value = codModulo;
                comando.Parameters[1].Value = codPuesto;

                IDbDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                List<MOD_Puesto_Permiso> lista = new List<MOD_Puesto_Permiso>();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    MOD_Puesto_Permiso obj = new MOD_Puesto_Permiso();
                    obj.PUEPER_codLinea = Convert.ToInt32(dt.Rows[i]["PUEPER_CODLINEA"]);
                    obj.PUEPER_nombre_permiso = dt.Rows[i]["PERM_NOMBRE"].ToString();
                    obj.PUEPER_descripcion = dt.Rows[i]["PERM_DESCRIPCION"].ToString();


                    lista.Add(obj);
                }


                return lista;

            }
            catch (Exception exc)
            {
                throw exc;
            }
        }

        public void CRE_PUESTO_PERMISO_MODULO(SqlCommand comando, int codPuesto, int codPermiso, int codModulo)
        {
            try
            {
                string sp = "SP_CRE_PUESTO_PERMISO_MODULO";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();


                comando.Parameters.Add(new SqlParameter("@PUESPER_CODPERMISO", SqlDbType.Int));
                comando.Parameters.Add(new SqlParameter("@PUESPER_CODPUESTO", SqlDbType.Int));
                comando.Parameters.Add(new SqlParameter("@PUESPER_CODMODULO", SqlDbType.Int));


                comando.Parameters[0].Value = codPermiso;
                comando.Parameters[1].Value = codPuesto;
                comando.Parameters[2].Value = codModulo;

                comando.ExecuteNonQuery();


            }
            catch (Exception exc)
            {
                throw exc;
            }
        }

        public int SEL_Puesto_Permiso_ModuloByIDs(SqlCommand comando, int codPuesto, int codPermiso, int codModulo)
        {
            try
            {
                string sp = "SEL_Puesto_Permiso_ModuloByIDs";
                int cant_puesper = 0;
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@PUESPER_CODPERMISO", SqlDbType.Int));
                comando.Parameters.Add(new SqlParameter("@PUESPER_CODPUESTO", SqlDbType.Int));
                comando.Parameters.Add(new SqlParameter("@PUESPER_CODMODULO", SqlDbType.Int));


                comando.Parameters[0].Value = codPermiso;
                comando.Parameters[1].Value = codPuesto;
                comando.Parameters[2].Value = codModulo;

                IDbDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                //MOD_OrdenamientoEstructural obj = new MOD_OrdenamientoEstructural();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    cant_puesper = Convert.ToInt32(dt.Rows[i]["PUESPER_CANT"]);


                }

                return cant_puesper;


            }
            catch (Exception exc)
            {
                throw exc;
            }
        }

        public void DEL_Puesto_Permiso_Modulo(SqlCommand comando, int codigoLinea)
        {
            try
            {
                string sp = "SP_DEL_Puesto_Permiso_Modulo";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();


                comando.Parameters.Add(new SqlParameter("@PUEPER_CODLINEA", SqlDbType.Int));

                comando.Parameters[0].Value = codigoLinea;

                comando.ExecuteNonQuery();


            }
            catch (Exception exc)
            {
                throw exc;
            }
        }

        //public DataTable ReporteUno(SqlCommand comando)//método y usar el resolve para referencias
        //{
        //    try//importante usarlo
        //    {
        //        string sp = "SP_SEL_Modulos"; //tiene que llamarse exactamente igual que el stored procedure de la bd

        //        comando.CommandType = CommandType.StoredProcedure;
        //        comando.CommandText = sp;
        //        comando.Parameters.Clear();//en caso de haber parámetros

        //        IDbDataAdapter da1 = new SqlDataAdapter((SqlCommand)comando);//clase que nos permite ir ejecutar la consulta y lleno
        //        DataSet ds1 = new DataSet();
        //        da1.Fill(ds1); //ejecuta el sp, en el fill ya tenemos la info

        //        return ds1.Tables[0];
        //    }
        //    catch (Exception exc)//en caso de error a nivel de acceso lo manda para arriba
        //    {
        //        throw exc;
        //    }
        //}
    }
}
